// TODO coderbin write here...

// * 封装一个 EventBus 类
class EventBus {
  // 保存类型与回调的容器
  callbacks = {}
 
  // *事件绑定
  // 其实就是将对应的事件名以及回调保存到 eventBus 的 callbacks 对象中
  on(type, callback) {
    const callbacks = this.callbacks[type]
    if (callbacks) {
      callbacks.push(callback)
    } else {
      this.callbacks[type] = [callback]
    }
  }

  // *事件触发
  // 其实就是遍历 eventBus 的 callbacks 对象里面保存的事件进行调用
  emit(type, data) {
    const callbacks = this.callbacks[type]
    if (callbacks && callbacks.length > 0) {
      callbacks.forEach(callback => {
        callback(data)
      }) 
    }
  }

  // *事件解绑
  off(eventName) {
    if (eventName) {
      delete this.callbacks[eventName]
    } else {
      this.callbacks = {}
    }
  }
}


const eventBus = new EventBus();

eventBus.on('login', function(data) {
  console.log(data + '登录成功');
})

eventBus.emit('login', 'coderbin')

eventBus.off('login')

console.log(eventBus);